/**
 * @param {number[][]} graph
 * @return {number[][]}
 */
var allPathsSourceTarget = function (graph) {
  let result = [] // 结果数组
  let path = [] // 记录经历的路径
  traversal(graph, 0, path)
  function traversal (graph, s, path) { // 传入三个参数 图 当前的下标 和路径
    path.push(s) // 添加当前的下标到当前的路径
    let n = graph.length // 得到这个的长度
    if (s === n - 1) { // 如果走到末尾了 就把当前的path加入到result中
      result.push([...path])
      return // 直接退出
    }
    // 如果没有走到末尾,递归所有的相邻节点
    for (let v of graph[s]) { // 找到所有的子路径
      traversal(graph, v, path) // 递归子路径
      // 都完成之后 将刚刚加入的这个路径弹出
      path.pop()
    }

  }
  return result
};
let graph = [[1, 2], [3], [3], []]
console.log(allPathsSourceTarget(graph));